JavaScript详细教程(4) - 数组

数组是值的有序集合。每个值叫做一个元素,而每个元素的数组中有一个位置,以数字表示,称为索引

创建数组

使用数组直接量创建

1
var array = [1, 2, 3, 4];

调用构造函数创建

若在调用构造函数时没有传入参数,如下面代码所示:

1
new Array();

该方法创建一个没有任何元素的空数组,等同于数组直接量[]。若在调用时传入一个数值参数,则该参数指定了数组的长度。如下面代码所示:

1
new Array(5);

这种方式创建的数组没有存储值,甚至数组的索引属性“0”,“1”等还未定义。

数组元素的读和写

数组的索引和对象的属性名是有所区别的,所以只有0-232-2之间的整数属性名才是索引,但由于所有数组都是对象,可以为数组创建任意名字的属性。但如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新它们的length属性值

稀疏数组

稀疏数组就是包含0开始的不连续索引的数组,稀疏数组的length属性值大于元素的个数

当在数组直接量中省略值不会创建稀疏数组,省略的元素咋数组中是存在的,其值为undefined,这和数组元素根本不存在是有一些微妙的区别的

数组长度

数组的长度保证大于它每个元素的索引值,为了维持这个规则数组由两个特殊行为

  1. 如果为一个数组元素赋值时,如果他的索引值i大于或等于现有的数组长度时,length属性的值将设置为i+1
  2. 当设置length属性为一个小鱼当前长度的非负整数n时,当前数组中那些索引值大于或正与n的元素将从中删除

数组元素的添加和删除

为新索引赋值

1
2
3
var a = [];
a[0] = "zero";
a[1] = "one";

push()和pop()

使用push()方法在数组的末尾增加一个或多个元素

1
2
3
var a = [];
a.push("zero");
a.push("one", "two");

使用pop()方法在数组的末尾取出一个元素

1
2
var a = [1, 2, 3, 4];
var element = a.pop();

shift()和unshift()

使用shift()从数组头部删除一个元素

1
2
var a = [1, 2, 3, 4];
a.shift();

使用unshift()从数组头部增加一个元素

1
2
var a = [];
a.unshift("zero");

数组遍历

for循环

1
2
3
4
var a = [1, 2, 3, 4];
for(var i = 0; i< a.length; i++){
console.log(a[i])
}

foreach()方法

1
2
3
4
5
var data = [1, 2, 3, 4, 5];
var sumOfSquares = 0;
data.foreach(function(x){
sumOfSquares += x * x;
});

ECMAScript 5中的数组方法

大多数es5中的数组方法的第一个参数是一个函数,第二个参数是可选的,如果有第二个参数,则调用的函数被看做是第二个参数的方法。也就是说,在调用函数时传递进去的第二个参数作为它的this关键字的值来使用

foreach()方法

foreach()方法从头至尾遍历数组

1
2
3
4
5
var data = [1, 2, 3, 4, 5];
var sumOfSquares = 0;
data.foreach(function(x){
sumOfSquares += x * x;
});

map()方法

map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值

1
2
a = [1, 2, 3];
b = a.map(function(){return x*x;}); //b是[1, 4, 9]

filter()

filter()方法返回数组元素是调用的数组的一个子集。传递的函数是用来逻辑判定的:该函数返回true或false。调用判定函数就像调用foreach()和map()一样,如果返回值为true或者能转换成true的值,它将被添加到一个作为返回值的数组中

every()和some()

every()和some()方法是数组的逻辑判定,他们对数组元素应用指定的函数进行判定,返回true或false

every()方法当前晋档针对数组中的所有元素调用判定函数都返回true,他才会返回true

some()方法当数组中至少有一个元素调用判定函数返回ture,他就返回true,当且晋档数组中所有元素调用判定函数都返回false,它才返回false

reduce()和reduceRight()

reduce()和reduceRight()方法使用指定函数将数组元素进行组合,生成单个值.
这在函数式编程中是常见的操作,也可以成为注入和折叠

reduceRight()的工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组

类数组对象

JavaScript数组的有一些特性是其他对象所没有的

  • 当有新的元素天剑到列表中时,自动更新length属性
  • 设置length为一个较小值将截断数组
  • 从Array.prototype中继承一些有用的方法
  • 其类属性为”Array”

这些特性让JavaScript数组和常规的对象有明显的区别。但是它们不是定义数组的本质特性。我们把拥有一个数值length属性和对应非负整数属性的对象看做一种类型数组

-------------本文到此结束,感谢您的阅读-------------